package com.ch.doudemo.util;

import android.app.Activity;
import android.os.Environment;

import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.BitmapCallback;
import com.zhy.http.okhttp.callback.FileCallBack;
import com.zhy.http.okhttp.callback.StringCallback;

import java.io.File;
import java.util.List;
import java.util.Map;

import okhttp3.MediaType;
import okhttp3.RequestBody;


/**
 * Http工具类
 */
public class HttpClientUtil {

    /**
     * post 请求 http/https 请求
     *
     * @param url      请求URL
     * @param jsonParm json格式的请求参数
     * @param activity 发起请求的Activity
     * @param callback 回调
     */
    public static void post(String url, String header, String jsonParm, Activity activity, StringCallback callback) {
        OkHttpUtils
                .postString()
                .url(url)
                .tag(activity)
                .addHeader("methodName", header)
                .mediaType(MediaType.parse("application/json;charset=utf-8"))
                .content(jsonParm)
//				.id(101)    //https   标记而已 无影响
//				.id(100)	//http
                .build()//
                .execute(callback);
    }

    /**
     * postToken 请求 http/https 请求
     *
     * @param url      请求URL
     * @param token    token
     * @param jsonParm json格式的请求参数
     * @param activity 发起请求的Activity
     * @param callback 回调
     */
    public static void postReq(String url, String token, String jsonParm, Activity activity, MyStringCallback callback) {
        OkHttpUtils
                .postString()
                .url(url)
                .tag(activity)
                .addHeader("juyou-ticket", token)
                .mediaType(MediaType.parse("application/json;charset=utf-8"))
                .content(jsonParm)
                .build()//
                .execute(callback);
    }


    /**
     * get 请求
     *
     * @param url      请求URL
     * @param params   请求参数 (Map<String, String>)
     * @param activity 发起请求的Activity
     * @param callback 回调
     */
    public static void get(String url, Map<String, String> params, Activity activity, StringCallback callback) {
        OkHttpUtils
                .get()
                .url(url)
                .tag(activity)
                .params(params)
                .build()
                .execute(callback);
    }


    /**
     * getReq 请求
     *
     * @param url      请求URL
     * @param token    token
     * @param activity 发起请求的Activity
     * @param callback 回调
     */
    public static void getReq(String url, String token, Activity activity, MyStringCallback callback) {
        OkHttpUtils
                .get()
                .url(url)
                .tag(activity)
                .addHeader("token", token)
                .build()
                .execute(callback);
    }


    /**
     * put请求
     *
     * @param url
     * @param requestBody json串
     * @param activity
     * @param callback    PUT具有幂等性：幂等通俗来说是指不管进行多少次重复操作，都是实现相同的结果
     *                    如果是更新，并不会产生新的数据，新的数据会覆盖老的数据，用put，如果是创建，会产生新的数据，则用post
     */
    public static void putReq(String url, String requestBody, Activity activity, MyStringCallback callback) {
        OkHttpUtils
                .put()//also can use delete() ,head() , patch()
                .requestBody(RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), requestBody))
                .url(url)
                .tag(activity)
                .build()//
                .execute(callback);
    }

//    /**
//     * 上传文件
//     *
//     * @param url 请求URL
//     * @param file 文件
//     * @param activity 发起请求的Activity
//     * @param callback 回调
//     */
//    public static void upload(String url, File file,Map<String, String> params, Activity activity, StringCallback callback) {
//        OkHttpUtils
//                .postFile()
//                .url(url)
//                .tag(activity)
//                .file(file)
//                .build()
//                .execute(callback);
//    }


    /**
     * 下载文件
     *
     * @param url      请求URL,带文件名以及后缀名
     * @param activity 发起请求的Activity
     * @param callback 回调
     */
    public static void download(String url, Activity activity, FileCallBack callback) {
        OkHttpUtils
                .get()
                .url(url)
                .id(100)
                .tag(activity)
                .build()
                .execute(callback);

    }


    /**
     * 取消请求
     *
     * @param activity
     */
    public static void cancel(Activity activity) {
        OkHttpUtils.getInstance().cancelTag(activity);
    }


    /**
     * 获取网络图片
     *
     * @param url            地址
     * @param activity
     * @param bitmapCallback
     */
    public static void getIamge(String url, Activity activity, BitmapCallback bitmapCallback) {
        OkHttpUtils
                .get()
                .url(url)
                .tag(activity)
                .build()
                .execute(bitmapCallback);
    }


    /**
     * post提交文件请求 单个文件上传
     *
     * @param url      请求地址
     * @param activity activity
     * @param file     上传文件
     * @param callback
     * @return 如果需要传递json串，请参照upLoadFiles
     */
    public static void postFile(String url, File file, Activity activity, StringCallback callback) {
//		File file1 = new File(Environment.getExternalStorageDirectory(), "1.jpg");
//		if (!file.exists())
//		{
//			Toast.makeText(MainActivity.this, "文件不存在，请修改文件路径", Toast.LENGTH_SHORT).show();
//			return;
//		}
        OkHttpUtils
                .postFile()
                .url(url)
                .file(file)
//				.id(100)
                .tag(activity)
                .build()
                .execute(callback);
    }


    /**
     * 多个文件上传
     *
     * @param fileUrls private String filePath; private String fileName;
     * @param callback
     * @param activity
     * @return 目前使用的是一种方法，另一种map集合方案见下面url
     * https://www.cnblogs.com/whycxb/p/7636249.html
     */
    public static void upLoadFiles(String url, List<String> fileUrls, Map<String, String> params, Activity activity, StringCallback callback) {
        File file1 = null;
        File file2 = null;
        //没写好
        for (int i = 0; i < fileUrls.size(); i++) {
            file1 = new File(Environment.getExternalStorageDirectory(), "1.jpg");
            file2 = new File(Environment.getExternalStorageDirectory(), "1.jpg");
        }
//		if (!file.exists()||!file2.exists())
//		{
//			Toast.makeText(MainActivity.this, "文件不存在，请修改文件路径", Toast.LENGTH_SHORT).show();
//			return;
//		}
        OkHttpUtils.post()//
                .addFile("mFile", "01.jpg", file1)//
                .addFile("mFile", "afua.txt", file2)//
                .url(url)
                .tag(activity)
                .params(params)
                .build()//
                .execute(callback);
    }

    /**
     * 上传文件
     *
     * @param url      请求URL  必须是post
     * @param activity 发起请求的Activity
     * @param callback 回调
     */
    public static void upload(String url, String filepath, String token, Activity activity, MyStringCallback callback) {
//        addFile (post里面定义的name 文件名  文件)
        OkHttpUtils
                .post()
                .url(url)
                .addHeader("TokenValue", token)
                .addFile("file", "111.jpg", new File(filepath))
                .tag(activity)
                .build()
                .execute(callback);
    }

}

